class Watcher {
    constructor(vm, key, cb) {
        this.vm = vm
        this.key = key
        this.cb = cb

        // 把 watcher 对象记录到 Dep 的静态属性中 target
        // 触发 get 方法，在 get 中会调用 addSub
        Dep.target = this
        this.oldValue = vm[key]
        Dep.target = null
    }

    // 数据变化时更新视图
    update() {
        let newValue = this.vm[this.key]
        if (this.oldValue === newValue) return
        this.cb(newValue)
    }
}
